package com.jsbs.iam.ident.service;

import com.github.pagehelper.PageInfo;
import com.jsbs.iam.common.core.dto.Result;
import com.jsbs.iam.common.core.param.AccountInfoDto;
import com.jsbs.iam.ident.dto.IamUpdateAccountStatus;
import com.jsbs.iam.ident.dto.IdentityAccountDto;
import com.jsbs.iam.ident.entity.IamAccountBase;
import com.jsbs.iam.ident.param.IamApplyDetaislParam;
import com.jsbs.iam.ident.vo.IamAccountBaseVo;

import java.util.List;

/**
 * @ClassName: AccountService
 * @Author: tenghuawei
 * @Date: 2022/12/5 15:20
 * @Description:
 */
public interface IdentityService {

    /**
     * 功能描述：账户中心——账号列表分页条件查询（超管）
     * @param identityAccountDto
     * @return PageInfo
     */
    PageInfo<IamAccountBaseVo> queryAccountList(IdentityAccountDto identityAccountDto);

    /**
     * 功能描述：账户中心——账号列表分页条件查询（普管）
     * @param identityAccountDto
     * @return PageInfo
     */
    PageInfo<IamAccountBaseVo> queryAccountListRange(IdentityAccountDto identityAccountDto);

    /**
     * 账户中心——账号导出查询（导出不需要分页）
     * @return
     */
    List<IamAccountBaseVo> queryExcelAccountList(IdentityAccountDto identityAccountDto);

    /**
     * 功能描述：根据用户编码，批量删除账号
     * @param userCode
     * @param companyCode
     * @return int
     */
    int batchDeleteByUserCode(List<String> userCode,String companyCode);

    /**
     * 启用或停用账号
     */
    int updateAccountStatus(IamUpdateAccountStatus iamUpdateAccountStatus);

    /**
     * 重置密码
     * @param iamUpdateAccountStatus
     */
    boolean resetPassword(IamUpdateAccountStatus iamUpdateAccountStatus);

    /**
     * 功能描述：自动创建账户信息
     * @param accountInfoDtos
     * @return
     */
    List<String> accountCreate(List<AccountInfoDto> accountInfoDtos);

    /**
     * 根据用户id或者用户手机号验证用户信息
     * @param iamAccountBase
     * @return
     */
    IamAccountBase getAccountPassword (IamAccountBase iamAccountBase);

    /**
     * 功能描述：账号导入
     * @param
     * @return
     */
    String accountImport(List<IamAccountBaseVo> iamAccountBaseVos, String companyCode, String userName);

    /**
     * 功能描述：查看账户的应用详情
     * @param iamApplyDetaislParam
     * @return Result
     */
    Result getApplicationDetails(IamApplyDetaislParam iamApplyDetaislParam);

    /**
     * 根据账户id查询账户数据
     *
     * @param accountId
     * @param companyCode
     * @return
     */
    List<IamAccountBaseVo> getAccountBase(String accountId, String companyCode);

    /**
     * 密码修改
     * @param employeeCode
     * @param newPassword
     * @param oldPassword
     * @return
     */
    int updatePassword (String employeeCode, String newPassword, String oldPassword) throws Exception;

    /**
     * 功能描述：自动失效账户
     * @param userCodeList
     * @param companyCode
     */
    void accountFail(List<String> userCodeList,String companyCode);
}
